package com.example.springboot.service;

import com.example.springboot.common.Page;

import java.util.List;

/**
 * 用户表(User)表服务接口
 *
 * @author makejava
 * @since 2024-01-13 17:16:26
 */
public interface UserService {


    /**
     * 登录
     *
     * @param account
     * @return
     */
    User login(Account account);

    /**
     * 注册
     *
     * @param account
     * @return
     */
    User register(Account account);

    /**
     * 找回密码
     *
     * @param account
     */
    void findPassword(Account account);

    /**
     * 获取所有用户信息
     *
     * @return
     */
    List<User> selectAll();


    /**
     * 根据ID删除
     *
     * @param id
     */
    void deleteById(Integer id);


    /**
     * 根据ID更新信息
     *
     * @param user
     */
    void updateById(User user);

//    /**
//     * 条件查询
//     * @param username
//     * @param name
//     * @param phone
//     * @param email
//     * @return
//     */
//    List<User> selectByManyCondition(String username, String name, String phone, String email);

    /**
     * 条件查询
     *
     * @param username
     * @param name
     * @param phone
     * @param status
     * @return
     */
    List<User> selectByManyCondition(String username, String name, String phone, Integer status);


    /**
     * 条件查询 分页查询
     *
     * @param currentPage
     * @param pageSize
     * @return
     */
    Page<User> selectByPage(Integer currentPage, Integer pageSize);


//    /**
//     * 分页查询
//     * @param currentPage
//     * @param pageSize
//     * @param username
//     * @param name
//     * @param phone
//     * @param email
//     * @return
//     */
//    Page<User> selectByManyConditionInpage(Integer currentPage, Integer pageSize, String username, String name, String phone, String email);

    /**
     * 分页查询
     *
     * @param currentPage
     * @param pageSize
     * @param username
     * @param name
     * @param phone
     * @param status
     * @return
     */
    Page<User> selectByManyConditionInpage(Integer currentPage, Integer pageSize, String username, String name, String phone, Integer status);

    /**
     * 分页查询
     *
     * @param currentPage
     * @param pageSize
     * @param username
     * @param name
     * @param phone
     * @return
     */
    Page<User> selectByManyConditionNoStatusInpage(Integer currentPage, Integer pageSize, String username, String name, String phone);


    /**
     * 批量删除
     *
     * @param ids
     */
    void deleteByIds(List<Integer> ids);


    /**
     * 添加用户
     *
     * @param user
     */
    void addUser(User user);

    /**
     * 根据ID查询
     *
     * @param id
     * @return
     */
    User selectById(Integer id);

    /**
     * 加载所有用户
     *
     * @return
     */
    List<User> loadAllUser();

    long getTotal();

    void updateAddressById(Integer id, String address);

    void updateNameAndAddressAndPhoneById(Integer id, String name, String address, String phone);

    User getUserById(Integer id);

    void updateSimpleById(User user);

    void changePasswordById(Integer id, String password, String newPassword);
}
